import java.util.HashMap;

public class Solution4 {

    HashMap<Integer, Integer> map;
    int m;
    int n;
    int total;
    public Solution4(int m, int n) {
        this.m = m;
        this.n = n;
        map = new HashMap<>();
        total = m * n;
    }

    public int[] flip() {
        int temp = (int) (Math.random() * total);
        int target = map.getOrDefault(temp, temp);
        --total;
        map.put(temp, map.getOrDefault(total, total));
        return new int[]{target / n, target % n};
    }

    public void reset() {
        total = m * n;
        map.clear();
    }

//    public int[] flip() {
//        while (true) {
//            int x = (int) (Math.random() * m);
//            int y = (int) (Math.random() * n);
//            if (map.containsKey(x) && map.get(x).contains(y)) {
//                continue;
//            } else {
//                List<Integer> list = map.getOrDefault(x, new ArrayList<>());
//                list.add(y);
//                map.put(x, list);
//                return new int[]{x, y};
//            }
//        }
//    }
}
